#pragma once
#include <Ogre.h>

#include <utility>

namespace PHYOgre
{
	typedef Ogre::Quaternion Quaternion;
	typedef Ogre::Vector3 Vector3;
	typedef Ogre::Vector2 Vector2;
	typedef Ogre::Matrix4 Matrix4;
	typedef Ogre::Matrix3 Matrix3;
	typedef Ogre::Real Real;

	const Real DEFAULT_DAMPLING = 0.995f;
	const Real G = 9.807f; //m/s^2

	const Real MAX_MASS_VALUE = 100000.0f;
	const Real MIN_MASS_VALUE = 0.000001f;

	//------------- QUERY MASKS ----------------------
	const unsigned int MASK_RIGID_BODY = 1 << 1;
	const unsigned int MASK_PARTICLE = 1 << 2;
	const unsigned int MASK_PLANE = 1 << 3;

	struct ParticleDescriptor
	{
	public:
		Vector3 position;
		Vector3 scale;
		Real mass;
	};
	struct RigidBodyDescriptor
	{
	public:
		Vector3 position;
		Vector3 scale;
		Real mass;
		Matrix3 tensor;
		Real friction;
		Real restitution;
	};

	enum ShapeType: unsigned int {PLANE = 0 , BOX = 1, SPHERE = 2 , LAST = 3};
	typedef std::pair<ShapeType,ShapeType> ShapePair;

	
}